package com.shujia.day15;

public class Code01ThreadOperation {
    public static void main(String[] args) {

        /*
            多线程的使用方式：
                第一种：创建一个自定义的线程类，该线程类需要去继承 extends Thread 类
                        其中Thread类就是用来管理多线程的一个类，对于需要多线程执行的代码，需要将其放在run方法中
                        在main方法中，可以创建多个自定义线程类对象，之后再通过start()方法对其中的run方法进行调用
                     注意：
                        不能直接通过自定义类的对象.run方法进行对象的调用 这是属于单线程的调用方式

             Thread类中的成员方法：
                1、run() 方法 start启动线程后，会自动调用其run()方法中的代码块，并创建一个线程来进行维护
                2、start()  表示开始执行启动一个线程，但是该方法执行后，线程不会立即执行，必须等待其获取到资源以后，再去执行
                3、getName() 获取当前线程中的名称（不是对象名称 可以理解为一个通道）
                        其中返回了Thread线程中的name成员变量，但是该变量是一个私有的 无法直接继承
                        但是有其有参构造提供了name进行赋值
                4、setName() 可以对线程名称进行重新赋值

             Thread类静态方法：
                1、currentThread() 获取当前正在执行的线程对象
         */
        System.out.println(Thread.currentThread().getName()+"线程名称获取到了..."); // main



        MyThread myThread1 = new MyThread("黄青平");
//        myThread1.setName("新黄青平");
        MyThread myThread2 = new MyThread("许云龙");

//        myThread1.run();
//        myThread2.run();

        // 对于run方法中代码 想要让同时执行

        myThread1.start();
        myThread2.start();

    }
}


class MyThread extends Thread {

    public MyThread(String name) {
        super(name); // 调用父类的构造方法 传入一个线程名称name
    }

    @Override
    public void run() {
        // 对于该for循环 可以在run方法中实现多线程执行
        for (int i = 0; i < 300; i++) {
            System.out.println(Thread.currentThread().getName()+"遍历到"+i);
//            System.out.println(getName()+"遍历到"+i);
        }
    }
}